package com.linkgie.galaxyframework.kvstorage;

/**
 * 键值存储上下文；
 * 
 * @author huanghaiquan
 *
 */
public interface KVStorageContext {

	/**
	 * 返回在全局上下文注册的指定类型的编码器；
	 * <p>
	 * 
	 * @param <T>
	 * @param type 数据类型；
	 * @return 数据编码器；如果没有，则返回 null；
	 */
	<T> DataCodec<T> getValueCodec(Class<T> type);

	/**
	 * 在全局上下文注册指定类型的编码器；
	 * 
	 * @param type
	 * @param codec
	 */
	<T> void setValueCodec(Class<T> type, DataCodec<T> codec);

	/**
	 * 为指定类型设置默认的 JSON 编码器；
	 * 
	 * @param <T>
	 * @param type
	 */
	<T> void configureJSONCodec(Class<T> type);

	/**
	 * 存储参数设置；
	 * 
	 * @return
	 */
	KVStorageSettings getSettings();

}